#include "vtor_elec_module.h"

// 加入需要依赖的头文件
#include "main.h"

// 加入需要依赖的变量
extern unsigned char OLED_GRAM[8][128];
extern  I2C_HandleTypeDef hi2c1;
extern  struct VtorI2c si2c2;
#define __OLED_SOFT_I2C__


// 自行实现OLED_WR_Byte函数发送一个字节
//mode:数据/命令标志 0,表示命令;1,表示数据;
void OLED_WR_Byte(unsigned char regData,unsigned char regAddr)
{
	// 可选dma发送或者非dma发送（dma需要延时）
#ifdef __OLED_SOFT_I2C__
	VtorI2c_WriteMem(&si2c2, 0x78, regAddr, 1, &regData, 1);
#else
	HAL_I2C_Mem_Write(&hi2c1, 0x78, regAddr, 1, &regData, 1, 0xffff);
#endif
	//HAL_I2C_Mem_Write_DMA(&hi2c1, 0x78, regAddr, 1 , &regData, 1);
	//HAL_Delay(1);

}

// 自行实现OLED_Refresh函数更新显存到OLED，连续写一行(可不写)
// stm32f103，diaan，
// 硬件iic 100kHz 约100ms
// 硬件iic 400k 约25ms
//void OLED_Refresh(void)
//{
//	unsigned char i = 0;
//	for(i=0;i<8;i++)
//	{
//		OLED_WR_Byte(0xb0+i,OLED_CMD); //设置行起始地址
////		OLED_WR_Byte(0x00,OLED_CMD);   //设置低列起始地址
////		OLED_WR_Byte(0x10,OLED_CMD);   //设置高列起始地址
//
//		HAL_I2C_Mem_Write(&hi2c1,0x78,OLED_DATA,1 ,
//				OLED_GRAM[i], 128, 0xffff);
//	}
//}

// burst传输（包含dma与非dma）
// 硬件iic 400k burst 23ms
void OLED_Refresh(void)
{
	// 非dma burst
#ifdef __OLED_SOFT_I2C__
	VtorI2c_WriteMem(&si2c2, 0x78, OLED_DATA, 1, &(OLED_GRAM[0][0]), 128 * 8);
#else
	HAL_I2C_Mem_Write(&hi2c1, 0x78, OLED_DATA, 1, &(OLED_GRAM[0][0]), 128 * 8, 0xffff);
#endif
	// dma burst 暂时不可用
//	while(hi2c1.State != HAL_I2C_STATE_READY);
//	HAL_I2C_Mem_Write_DMA(&hi2c1, 0x78, OLED_DATA, I2C_MEMADD_SIZE_8BIT ,
//		&(OLED_GRAM[0][0]), 128 * 8);
//	HAL_Delay(1);

}



